class Solution {
public:
    vector<string> ans;
    //非回溯：8 array 每个位置多种取值，放入内容 array[3] 那就1的位置会有三种 charAt修改按此即可
    //回溯
    string temp;
    void dfs(int depth,string digits){
        if (depth==digits.length()){
            ans.push_back(temp);
            return;
        }
        int num = digits[depth]-'0'; //只针对当前位
        for(int j=0;j<(mp[num]).length();j++){
            temp[depth] = mp[num][j]; 
            dfs(depth+1,digits);

        }
    }
    map<int,string>  mp;
    vector<string> letterCombinations(string digits) {
        if (digits.length()==0) return ans;
        temp = digits; //这是为了让temp和digits等长，以便修改每个位置上的cchar
        mp.insert(pair<int,string>(2,"abc"));
        mp.insert(pair<int,string>(3,string("def")));
        mp.insert(pair<int,string>(4,string("ghi")));
        mp.insert(pair<int,string>(5,string("jkl")));
        mp.insert(pair<int,string>(6,string("mno")));
        mp.insert(pair<int,string>(7,string("pqrs")));
        mp.insert(pair<int,string>(8,string("tuv")));
        mp.insert(pair<int,string>(9,string("wxyz")));
       dfs(0,digits);
        return ans;
    }
};